package bean;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import outils.securite;
import DAO.DAOUser;
import DAO.DAOUserJPA;
import metier.User;


public class BeanUtilisateur implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private User utilisateur = new User();
	private User currentUser = null;
	private String confirmation="";
	private DAOUser dao = DAOUserJPA.getInstance();
	
	
	public User getUtilisateur() {
		return utilisateur;
	}
	
	public User getCurrentUser() {
		return currentUser;
	}
	
	public String getConfirmation(){
		return confirmation;
	}
	
	public void setConfirmation(String pass){
		this.confirmation = pass;
	}
	
	// M�thode d'action appel�e lors du clic sur le bouton du formulaire
    // d'inscription
	public String enregistrer() {
		dao.save(currentUser);
		return "UtilisateurEnregistre";
	}
	
	
	public String connexion(){
		List<User> listeUser = dao.trouver(utilisateur.getLogin(), securite.encrypt(utilisateur.getPassword()));
		
		if (listeUser.size() == 1)
			currentUser = listeUser.get(0);
		else
			currentUser = null;
		
		if (currentUser == null)
			return "echec";

		return "connexionOK";
		
		
	}
	
	public boolean isLoggedIn() {
	        return currentUser != null;
	}
	
	public boolean isAdmin(){
		if (isLoggedIn())
			return currentUser.getDroits()==1;
		return false;
	}
	
	public String deconnexion(){
		currentUser = null;
		FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
		return "deconnexionOK";
	}
	
	
	public String inscription(){
		if (confirmationMdp() && !loginUsed())
		{
		currentUser = new User();
		currentUser.setLogin(utilisateur.getLogin());
		currentUser.setPassword(securite.encrypt(utilisateur.getPassword()));
		String res = enregistrer();
		return res;
		}
		else
			return "echecInscription";
	}
	
	public boolean confirmationMdp(){
		if (getConfirmation()=="")
				return true;
		if (utilisateur.getPassword().equals(this.getConfirmation()))
				return true;
		return false;
	}
	
	//V�rification si le login choisi lors de l'inscription n'est pas d�j� utilis�
	public boolean loginUsed(){
		List<User> listeUserLogin = dao.trouverLogin(utilisateur.getLogin());
		
		if (listeUserLogin.size() >= 1)
			return true;
		else
			return false;
	}
}
